﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace 时钟壁纸应用.主要窗口
{
    class 设置文件
    {
        用户设置 设定档 = null;
        辅助类.配置项 配置 = new 辅助类.配置项();
        时间区间 时间段 = new 时间区间();
        string 文件路径 = null;
        /// <summary>
        /// 将设置文件读取出来准备操作，若设置文件不存在，就会新建一个设置文件。
        /// </summary>
        /// <param name="建立的设定档"></param>
        public void 打开设置(用户设置 载入的设定档,时间区间 时间区间)
            {

            设定档 = 载入的设定档;
            时间段 = 时间区间;
            文件路径 = 设定档.配置文件路径;
            if (File.Exists(文件路径) == false)
            {
                日志.输出("正在新建档案...");
                日志.输出("正在写入初始数据...");
                新建(文件路径);
                日志.输出("档案新建完毕...");
            }
            日志.输出("打开了 " + 文件路径);
            设定档.刷新间隔 = Convert.ToInt32(配置.读取(文件路径, "性能设置", "刷新间隔", "500"));
            设定档.后台刷新间隔 = Convert.ToInt32(配置.读取(文件路径, "性能设置", "后台刷新间隔", "1500"));
            设定档.非即时模块刷新间隔 = Convert.ToInt32(配置.读取(文件路径, "性能设置", "非即时模块刷新间隔", "360000"));
            设定档.壁纸_文件夹路径 = 配置.读取(文件路径, "壁纸设置", "壁纸_文件夹路径", "500");
            设定档.配置文件路径 = 配置.读取(文件路径, "配置文件路径", "配置文件路径", "500");
            设定档.闹钟_下次响铃时间 = DateTime.Parse(配置.读取(文件路径, "闹钟设置", "闹钟_下次响铃时间", DateTime.Parse("2000/1/1 0:0:0").ToString()));
            设定档.闹钟_提醒内容 = 配置.读取(文件路径, "闹钟设置", "闹钟_提醒内容", "不设定");
            设定档.闹钟_模式 = (用户设置.闹钟模式)Enum.Parse(typeof(用户设置.闹钟模式),配置.读取(文件路径, "闹钟设置", "闹钟_模式", "500"));
            设定档.闹钟_铃声位置 = 配置.读取(文件路径, "闹钟设置", "闹钟_铃声位置", @"\铃声\时钟应用 - 倒计时.wav");
            设定档.闹钟_设定闹钟时间 = DateTime.Parse(配置.读取(文件路径, "闹钟设置", "闹钟_设定闹钟时间", DateTime.Now.ToString()));
            设定档.组合键 = (HotkeyModifiers)Enum.Parse(typeof(HotkeyModifiers), 配置.读取(文件路径, "显示设置", "组合键", "MOD_ALT"));
            设定档.普通键 = (System.Windows.Input.Key)Enum.Parse(typeof(System.Windows.Input.Key), 配置.读取(文件路径, "显示设置", "普通键", "T"));
            
            //铃声组读取
            List<string> 铃声组 = new List<string>();
            string[] 分隔文本 = 配置.读取(文件路径, "闹钟设置", "闹钟_铃声组", "无铃声").Split('|');
            foreach (string i in 分隔文本)
            {
                铃声组.Add(i);
            }
            设定档.闹钟_铃声组 = 铃声组;
            if (设定档.闹钟_铃声组.Count >= 2)
            {
                设定档.闹钟_模式 = 用户设置.闹钟模式.循环闹钟;
                Console.WriteLine($"{设定档.闹钟_铃声组.Count} 铃声已读取，组名 {Path.GetFileName(设定档.闹钟_铃声组[0]).Split(' ')[0]}");
            }
            //时间组读取
            string 时间组 = 配置.读取(文件路径, "显示设置", "时段划分", "时间|0-23");
            
            
            Regex 匹配器 = new Regex(@"([^ ].*?)\|(\d+)-(\d+)");
            var 匹配集 = 匹配器.Matches(时间组);
            int 匹配 = 0;
            if (匹配集.Count == 0)
            { return; }
            for (; 匹配 < 匹配集.Count; 匹配++)
            {
               string 时间段名 = 匹配集[匹配].Groups[1].Value;
               int 时间段开始 = int.Parse(匹配集[匹配].Groups[2].Value);
               int 时间段结束 = int.Parse(匹配集[匹配].Groups[3].Value);
              时间段.新增时间区间(时间段名, 时间段开始, 时间段结束);
        
            }

        }

        public void 读取(string 设置类别,string 设置子项)
        {
            配置.读取(文件路径, 设置类别, 设置子项, "读取失败");
        }
        public void 写入(string 设置类别, string 设置子项,string 写入内容)
        {
            配置.写入(文件路径, 设置类别, 设置子项,写入内容);
        }
        public void 新建(string 文件路径 )
        {
            辅助类.配置项 配置 = new 辅助类.配置项();
            配置.写入(文件路径, "性能设置", "刷新间隔", "500");
            配置.写入(文件路径, "性能设置", "后台刷新间隔", "1500");
            配置.写入(文件路径, "性能设置", "非即时模块刷新间隔", "360000");
            配置.写入(文件路径, "闹钟设置", "闹钟_铃声位置", System.Environment.CurrentDirectory + @"\铃声\时钟应用 - 倒计时.wav");
            配置.写入(文件路径, "闹钟设置", "闹钟_下次响铃时间", DateTime.Parse("2000/1/1 0:0:0").ToString());
            配置.写入(文件路径, "闹钟设置", "闹钟_提醒内容", "剩余时间");
            配置.写入(文件路径, "闹钟设置", "闹钟_铃声组", "不设定");
            配置.写入(文件路径, "闹钟设置", "闹钟_模式", "关闭");
            配置.写入(文件路径, "壁纸设置", "壁纸_文件夹路径", Environment.GetFolderPath(Environment.SpecialFolder.MyPictures) + "\\壁纸\\");
            配置.写入(文件路径, "配置文件路径", "配置文件路径", System.Environment.CurrentDirectory + @"\程序配置.txt");
            配置.写入(文件路径, "闹钟设置", "闹钟_设定闹钟时间", DateTime.Now.ToString());
            配置.写入(文件路径, "显示设置", "时段划分", "午夜|0-1 凌晨|2-5 清晨|6-7 早上|8-9 上午|10-11 中午|12-12 下午|13-17 傍晚|18-19 晚上|20-22 深夜|23-23");
            配置.写入(文件路径, "显示设置", "组合键", "MOD_ALT");
            配置.写入(文件路径, "显示设置", "普通键", "T");
        }
        public void 重写闹钟设置并载入()
        {
            配置.写入(文件路径, "闹钟设置", "闹钟_铃声位置", System.Environment.CurrentDirectory + @"\铃声\时钟应用 - 倒计时.wav");
            配置.写入(文件路径, "闹钟设置", "闹钟_下次响铃时间", DateTime.Parse("2000/1/1 0:0:0").ToString());
            配置.写入(文件路径, "闹钟设置", "闹钟_提醒内容", "不设定");
            配置.写入(文件路径, "闹钟设置", "闹钟_铃声组", "不设定");
            配置.写入(文件路径, "闹钟设置", "闹钟_模式", "关闭");
            设定档.闹钟_模式 = 用户设置.闹钟模式.关闭;
            设定档.闹钟_提醒内容 = "剩余时间";
            设定档.闹钟_铃声组.Clear();
            设定档.闹钟_下次响铃时间 = DateTime.Parse("2000/1/1 0:0:0");


        }
        public void 删除()
        {

        }
    }
}
